// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.

#ifndef STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
#define STORAGE_LEVELDB_UTIL_HISTOGRAM_H_

#include <string>

namespace leveldb {

    class Histogram {
    public:
        Histogram() {}

        ~Histogram() {}

        void Clear();

        void Add(double value);

        void Merge(const Histogram &other);

        std::string ToString() const;

    private:
        enum {
            kNumBuckets = 154
        };

        double Median() const;

        double Percentile(double p) const;

        double Average() const;

        double StandardDeviation() const;

        static const double kBucketLimit[kNumBuckets];

        double min_;
        double max_;
        double num_;
        double sum_;
        double sum_squares_;

        double buckets_[kNumBuckets];
    };

}  // namespace leveldb

#endif  // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
